import axios, { AxiosResponse } from 'axios';

// 创建实例时配置默认值
const request = axios.create({
    timeout: 6000 * 30, // 超时时间180s
    baseURL: import.meta.env.VITE_APP_BASE_API,
    withCredentials: true, // 允许携带cookie
    headers: {
        'Content-Type': 'application/json; charset=utf-8'
    }
});

// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 如果token不为空，请求头中放token
    const token = localStorage.getItem('token');
    if (token) {
        config.headers['token'] = token;
    }
    return config;
}, function (error) {
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    return response;
}, function (error) {
    return Promise.reject(error);
});

const http = {
    get<T>(url: string, params?: any, config?: {}): Promise<T> {
        return new Promise((resolve, reject) => {
            request
                .get<T>(url, { params, ...config })
                .then((res: AxiosResponse<T>) => {
                    resolve(res.data);
                })
                .catch((error) => {
                    reject(error);
                });
        });
    },
    post<T>(url: string, data?: any, config?: {}): Promise<T> {
        return new Promise((resolve, reject) => {
            request
                .post<T>(url, data, config)
                .then((res: AxiosResponse<T>) => {
                    resolve(res.data);
                })
                .catch((error) => {
                    reject(error);
                });
        });
    },
};

export default http;